home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2005 March
/
CMCD0305.ISO
/
Software
/
Shareware
/
Programare
/
restuner
/
ResTuner_setup.exe
/
{app}
/
restuner.chm
/
example_c.txt
< prev
next >
Wrap
Text File
|
2005-01-11
|
4KB
|
141 lines
//-----------------------------------------------------------------------------
// PE Explorer/Resource Tuner Demo Plug-In
// (c)2001 by Yuri Rai & Mike Caetano/Heaventools ltd.
// http://www.heaventools.com
//
// C++
//-----------------------------------------------------------------------------
#include <windows.h>
#include "globals.h"
// ---------------------------------------------------------------------------
// ResTuner MEMORY ALLOCATOR FUNCTION POINTER TYPEDEF
typedef void * __stdcall (*pfnMemoryAllocator)(DWORD);
// ---------------------------------------------------------------------------
// ResTuner CALLBACK FUNCTION FUNCTION POINTER TYPEDEF
typedef void __stdcall (*pfnPGICallBack)(DWORD, DWORD, LPCTSTR);
// ---------------------------------------------------------------------------
// ResTuner PLUGIN INTERFACE STRUCTURE
typedef struct tagPGIParamsBlock
{
pfnMemoryAllocator pMemAllocator; // function pointer to ResTuner supplied
// memory allocation
pfnPGICallBack pCallBack; // function pointer to ResTuner callback
// function
LPVOID pInBuff; // pointer to input buffer
LPVOID pOutBuff; // pointer to output buffer filled by plugin
DWORD dwInSize; // size in bytes of input buffer
DWORD dwOutSize; // size in bytes of output buffer set by plugin
DWORD dwInterface; // read only interface ID
DWORD dwIndex; // read only plugin index
}
PGIParamsBlock, *PPGIParamsBlock;
// ---------------------------------------------------------------------------
// GLOBAL VARIABLES
LPCTSTR szPluginName = SZPLUGINNAME;
DWORD evID_PostLogInfo = 0;
// ---------------------------------------------------------------------------
// EXPORT FUNCTION PROTOTYPES
void __stdcall PexRegisterPlugIn(LPCTSTR *);
void __stdcall PexAboutPlugIn(void);
BOOL __stdcall PexPreloadImage(PPGIParamsBlock);
// ---------------------------------------------------------------------------
// EXPORT FUNCTION IMPLEMENTATIONS
// ---------------------------------------------------------------------------
// ResTuner R E G I S T E R P L U G I N
void __stdcall __declspec(dllexport) PexRegisterPlugIn(LPCTSTR *ppPluginName)
{
*ppPluginName = szPluginName;
}
// ---------------------------------------------------------------------------
// ResTuner A B O U T P L U G I N
void __stdcall __declspec(dllexport) PexAboutPlugIn(void)
{
TCHAR szBuffer[MAX_PATH];
ZeroMemory(szBuffer,MAX_PATH);
wsprintf(szBuffer, TEXT("%s\r\n%s"), szPluginName, SZVERSION);
MessageBox(NULL, szBuffer, TEXT("About"), MB_OK|MB_ICONINFORMATION);
}
// ---------------------------------------------------------------------------
// ResTuner(P E X) P R E L O A D I M A G E
BOOL __stdcall __declspec(dllexport) PexPreloadImage(PPGIParamsBlock pPGIPB)
{
// assume the worst :-)
BOOL result = FALSE;
// setup messages for ResTuner log window
LPCTSTR DemoMessage1 = "Emulating Execution...";
LPCTSTR DemoMessage2 = "Allocating memory ...";
LPCTSTR DemoMessage3 = "Copy InBuff to OutBuff...";
LPCTSTR DemoMessage4 = "Runtime error: PexPreloadImage";
// assign function pointers to local variables
pfnMemoryAllocator MA = pPGIPB->pMemAllocator;
pfnPGICallBack CB = pPGIPB->pCallBack;
__try
{
// announce plugin invocation
if ( CB != NULL ) {
CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage1);
}
// announce action preparation
if ( CB != NULL ) {
CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage2);
}
// set output buffer size parameter
pPGIPB->dwOutSize = pPGIPB->dwInSize;
// let ResTuner allocate shared memory for output buffer
pPGIPB->pOutBuff = MA(pPGIPB->dwInSize);
// transfer contents to output buffer
CopyMemory(pPGIPB->pOutBuff, pPGIPB->pInBuff, pPGIPB->dwInSize);
// announce action success
if ( CB != NULL ) {
CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage3);
}
// all systems go!
result = TRUE;
}
__except ( EXCEPTION_EXECUTE_HANDLER )
{
// announce error
if ( CB != NULL ) {
CB(pPGIPB->dwInterface, evID_PostLogInfo, DemoMessage4);
}
}
// return status
return(result);
}
// ---------------------------------------------------------------------------